package servidorVehiculo.DAO;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import Dominio.Medida;
import Dominio.Sensor;
import Dominio.Usuario;



public class UsuarioDAO {
	private static UsuarioDAO instance;
	private Connection connection;
	
	private static UsuarioDAO getInstance(){
		return instance;
	}
	
	public static void init() throws SQLException{
		instance = new UsuarioDAO();
		instance.connection = DAOServidorVehiculo.getConnection();
	}
	
	public static void close(){
		instance = null;
	}
	
	
	public static List<Usuario> listUsers() throws SQLException{
		return instance.listaUsuarios();
	}
	
	public static Usuario getUser(String username) throws SQLException{
		return getInstance().devolverUsuario(username);
	}
	
	public static void insertUser(String user, String pass) throws SQLException{
		getInstance().altaUsuario(user, pass);
	}

	public static void updateUser(String oldname, String newname, String pass) throws SQLException{
		getInstance().updateUsuario(oldname, newname, pass);
	}
	
	public static void deleteUser(String name) throws SQLException{
		getInstance().bajaUsuario(name);
	}
	
	public boolean existeUsuario(String u) throws SQLException {
		PreparedStatement smt = connection.prepareStatement("SELECT * FROM USUARIO WHERE NOMBRE=?");
		smt.setString(1, u);
		ResultSet rs = smt.executeQuery();
		boolean r = rs.next();
		rs.close();
		smt.close();
		return r;
	}

	public String altaUsuario(String u, String p) throws SQLException{
		if (!existeUsuario(u)) {
			PreparedStatement smt = connection.prepareStatement("INSERT INTO USUARIO(NOMBRE, CLAVE) VALUES (?,?)");
			smt.setString(1, u);
			smt.setString(2, p);
			smt.executeUpdate();
			smt.close();
			return "Bienvenido, se te ha dado de alta en el servicio";
		} else {
			return "Usuario duplicado";
		}
	}

	// da de baja a un usuario
	public void bajaUsuario(String u) throws SQLException{
		PreparedStatement smt = connection.prepareStatement("DELETE FROM USUARIO WHERE NOMBRE = ?");
		smt.setString(1, u);
		smt.executeUpdate();
		smt.close();
	}

	// modifica los datos de un usuario(user)
	public void updateUsuario(String usu, String user, String pass)
			throws SQLException{
		PreparedStatement smt = connection.prepareStatement("UPDATE USUARIO SET NOMBRE = ? , CLAVE = ? WHERE NOMBRE = ?");
		smt.setString(1, user);
		smt.setString(2,pass);
		smt.setString(3, usu);
		smt.executeUpdate();
		smt.close();
	}
	
	//devuelve un user
	public Usuario devolverUsuario(String u) throws SQLException{

		PreparedStatement smt = connection.prepareStatement("SELECT * FROM USUARIO WHERE NOMBRE = ?");
		smt.setString(1, u);
		ResultSet rs = smt.executeQuery();
		
		rs.next();
		
		String User = rs.getString(1);
		String pass = rs.getString(2);

		Usuario s = new Usuario(User, pass);

		rs.close();
		smt.close();

		return s;
	}
	
	// devuelve la lista de usuarios del vehiculo
	public List<Usuario> listaUsuarios() throws SQLException {

		List<Usuario> lUsuarios = new ArrayList<Usuario>();

		PreparedStatement stm = connection.prepareStatement("SELECT * FROM USUARIO");
		ResultSet rs = stm.executeQuery();
		while (rs.next()) {

			String user = rs.getString(1);
			String pass = rs.getString(2);
			
			Usuario usu = new Usuario(user, pass);
			lUsuarios.add(usu);
		}
		rs.close();
		stm.close();

		return lUsuarios;
	}


}